<?php
class Delivery_Model_DbTable_ProductosPedidos
	extends Delivery_Model_DbTable_Abstract

{
	protected $_name = 'pedido_productos';
	protected $_primary = array('idPedido', 'idProducto');
	
	public function guardar( $pedido ){
		
//		if ( $this->getById($pedido->idProducto, $pedido->idPedido)){
//			return;
//		}
		
		$data = array (
			'idPedido'		=> $pedido->idPedido,
   			'idProducto'	=> $pedido->idProducto,
   			'cantidad'		=> $pedido->cantidad,
		    'precioAdicional'		=> $pedido->precioAdicional
   		);	
		
   		if( is_array($pedido->opcionesIds)){
   		
   		    $data['opcionesIds'] = implode(',', $pedido->opcionesIds); 
   		    $data['opcionesCantidades'] = implode(',', $pedido->opcionesCantidades); 
   		    
   		}
   		
		return parent::insert($data);
	}
	
	public function getByPedido( $idPedido ){
		
		
		// usar siempre asi cuando hay un join
		$select = $this->select(self::SELECT_WITH_FROM_PART)
		 			->setIntegrityCheck(false)
		 					
		             ->join('productos',
		             		'productos.idProducto = pedido_productos.idProducto')	
					->where('pedido_productos.idPedido = ?', $idPedido, Zend_Db::INT_TYPE);	
				
		return 
			$this->_fetchAll(
				$select
			);
	}
	
	public function getByPedidos( $idsPedido ){
		
		
		// usar siempre asi cuando hay un join
		$select = $this->select(self::SELECT_WITH_FROM_PART)
		 			->setIntegrityCheck(false)
		 					
		             ->join('productos',
		             		'productos.idProducto = pedido_productos.idProducto')	
					->where('pedido_productos.idPedido IN (?)', $idsPedido, Zend_Db::INT_TYPE);	
					
		return 
			$this->_fetchAll(
				$select
			);
	}
	
	public function getById( $idProducto, $idPedido = null){
		
		$select = $this->select()->where('idProducto = ?', $idProducto, Zend_Db::INT_TYPE );
		
		if ( $idPedido ){
			$select->where('idPedido = ?', $idPedido, Zend_Db::INT_TYPE );
		}	
		
		return $this->_fetch( $select );
	}
	
    public function inAnyOrderOpcion( $idOpcion ){
	
        $select = $this->select()
						->from($this, array('idProducto'))
						->where("opcionesIds  REGEXP '^?$|^?,|,?,|,?$'", $idOpcion, Zend_Db::INT_TYPE )
						->limit(1);
		
		$result = $this->getAdapter()->fetchRow( $select );
		return ! empty( $result );
	}
	
	protected function _fetch( $select )
	{
	    $row = $this->_db->fetchRow( $select );
	    
        return $this->_opciones( $row );
	}
	
    protected function _fetchAll( $select )
	{
	    $rowset = $this->_db->fetchAll( $select );
	    
	    foreach ( $rowset as &$row){
	        $row = $this->_opciones( $row );
	    }
	    
	    return $rowset; 
	}
	
    protected function _opciones( $row )
	{
	    if (!empty($row['opcionesIds'])){
	        $row['opcionesIds'] = explode(',', $row['opcionesIds']);
	        $row['opcionesCantidades'] = explode(',', $row['opcionesCantidades']);
	        
	        $row['opcionesCantidades'] = array_combine( $row['opcionesIds'], $row['opcionesCantidades']);
	    }
	    return $row; 
	}
	
}